¿Qué es una inyección de sql? [Explica makeuseof]
El mundo de la seguridad en Internet está plagada de puertos abiertos, puertas traseras, los agujeros de seguridad, troyanos, gusanos, las vulnerabilidades de firewall y una serie de otros temas que nos mantienen a todos en nuestros dedos de los pies todos los días. Para los usuarios privados, virus y gusanos parecen ser la peor de las posibilidades. Pero para cualquier persona que ejecute una base de datos, la inyección de SQL es una de las fallas de seguridad más destructivas que hay.
Las bases de datos son muy valiosos en el campo de los ordenadores. Son esenciales para el almacenamiento de datos como la memoria y mostrando las diversas relaciones entre puntos de datos. Aquí en MakeUseOf, tenemos numerosas bases de datos destinadas a distintas tareas: uno para todos nuestros artículos, uno para nuestra base de usuarios, una para nuestro programa de recompensas, y la lista sigue. ¿Qué pasa cuando nuestras bases de datos son atacados maliciosamente - o incluso destruidos?
Cuando usted no tiene acceso real a una base de datos, la inyección de SQL es una de las formas más prominentes de ataque. Sigue leyendo para aprender lo que es exactamente y cómo puede ser tan peligroso.
Vídeo: Como hacer una inyección SQL simple
¿Qué es SQL, de todos modos?
Para entender la inyección de SQL, usted tiene que entender primero qué es SQL y cómo se relaciona con un sitio web. SQL, lo que significa Structured Query Language, es un tipo de lenguaje de programación optimizado para la gestión de datos tabulares. Para todos los efectos, es sólo una manera para que los programadores se comunican con una base de datos y darle órdenes.
Cada vez que una base de datos se están poniendo en práctica, hay comandos SQL que se dan y se procesan. Si se piensa en todas las veces en que una base de datos se están poniendo en práctica, se llegará a la conclusión de que sólo ocurre en un puñado de circunstancias:
- Cuando los nuevos datos necesita ser insertado,
- Cuando los datos actuales que hay que cambiar,
- Cuando los datos de edad necesita ser eliminado,
- Cuando una pieza particular de datos necesita ser buscado y recuperado.
En cualquier momento en una de estas acciones es necesario que ocurra, un comando SQL se está ejecutando en algún lugar en el servidor. En su mayor parte, el programador obtiene para determinar cuándo y dónde se producen estos comandos SQL en el código fuente. Sin embargo, hay circunstancias inevitables cuando un usuario puede forzar una manipulación de una base de datos - y esas oportunidades están a su alrededor.
¿Alguna vez ha iniciado sesión en un sitio web? ¿Alguna vez ha publicado un comentario en un artículo de blog o una respuesta en un hilo del foro? Jamás enviado un mensaje de Facebook a un amigo? Escrito un correo electrónico en Gmail? La búsqueda de un sitio web en Google? Cada vez que vea un campo de entrada en una página web (nombre de usuario, contraseña, consulta de búsqueda, cuadro de mensaje, etc.), que el texto se envía a la base de datos y actuar en consecuencia.
Ahora, si un usuario malicioso quería manipular una base de datos, no hay muchas opciones para él. Una posibilidad sería la ganancia real físico el acceso al servidor y destruirlo en su base. Pero por lo demás, tiene más sentido para el usuario malicioso para secuestrar un comando SQL existente cuando se utiliza un campo de entrada, lo que obliga al servidor para ejecutar un comando diferente de lo que se pretendía originalmente.
La técnica de inyección SQL
Este acto de secuestro de un comando SQL existente es lo que se refiere a la inyección de SQL. Por qué se llama la inyección? Debido a que el secuestro de un comando SQL requiere que el usuario para inyectar su propio código SQL cuando se utiliza un campo de entrada. No confundir ese sonido? Permítanme ilustrar con un ejemplo.
Considere la página de inicio de sesión de MakeUseOf. Al introducir su nombre de usuario y contraseña y pulsa “Enviar“, Que está obligando al servidor web para generar un comando SQL que consiste en la información que acaba de dar, es decir, su nombre de usuario y contraseña. La base de datos recibe la información, verifica que la combinación de nombre de usuario / contraseña es correcta, entonces le da el acceso adecuado a otras áreas del sitio.
Ahora imagine lo que pasaría si un usuario malicioso no entró en su nombre de usuario y contraseña, pero en vez tecleado un comando SQL como su nombre de usuario? Si el código del servidor no está bien fijado, la base de datos recibirá el nombre de usuario defectuosa (que en realidad es un comando SQL) y en realidad ejecuta como comando.
Y es por eso que se llama inyección. El comando SQL se inyecta en la base de datos a través de medios completamente legítimos, manipulándolo tal que termina haciendo algo que no estaba destinado a hacer.
Un ejemplo avanzado
Hasta ahora, he descrito la inyección de SQL en términos de alto nivel para que cualquiera pueda entender, incluso los que no tienen conocimientos de programación. En esta sección, voy a dar un ejemplo real de cómo esta técnica es posible. Si usted es un novato SQL, o si nunca ha tratado con la programación antes, entonces puede saltarse esta sección en silencio.
Al iniciar sesión en un sitio web, aquí hay una manera posible de que el código se podría escribir en SQL:
user_id SELECT
DE users_db
WHERE nombre = `$ nombre de usuario` y la contraseña = `$ password`
Básicamente, el comando solicita a la base de datos para devolver todo user_ids de la mesa users_db que coinciden con la combinación de nombre de usuario y la contraseña introducida. Mira todo lo fino y elegante, ¿verdad?
Supongamos que el formulario de acceso se le dio las siguientes entradas:
Nombre de usuario: David
Contraseña: fubar` OR ‘ `=` x xVídeo: Inyecciones SQL (URJCx)
Observe que el campo de contraseña no empieza ni termina con un apóstrofe. Cuando el servidor recibe este intento de inicio de sesión, que se llevará a todo lo dado en el campo de la contraseña y ponerlo en lugar de la contraseña $ en el código. El comando SQL resultante tendrá este aspecto:
user_id SELECT
DE users_db
WHERE nombre de usuario = `David` y la contraseña =`fubar` OR ‘x `=` x`
Cuando el servidor se ejecuta este comando, la última parte de ese comando SQL siempre return true. Esto significa que el usuario malintencionado podría introducir cualquier nombre de usuario y al instante acceder a esa cuenta ya que el inicio de sesión funcionaría si tiene o no tiene el derecho contraseña.
Por supuesto, iniciar sesión en la cuenta de alguien es un delito bastante suave cuando se compara con todos los demás intentos de hackers posibles: la eliminación de bases de datos completas, ensuciando todos los datos, o incluso robando los datos en las bases de datos.
desarrolladores web profesionales son cada vez mejor y mejor en la prevención de este tipo de trucos, pero de vez en cuando se oirán que una empresa sufrió pérdidas a manos de un ataque de inyección SQL. Cuando esto ocurre, ahora sabe lo que significa y cómo es posible.